package com.train.mgr.modules.biz.utils;

import com.train.common.utils.StringUtils;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.stream.Collectors;

public class PromptTemplates {

    /** 销售话术演练【流畅度】总结提示语 */
    public static final String FLUENCY_SUMMARY ="请根据以下销售话术演练的流畅度表现，撰写一段简洁的总结分析文案。" +
                                                "要求：不使用标题，直接输出内容，语言精炼、客观中肯，列出具体不足的点。" +
                                                "表现详情：%s 影响流利性问题：%s %s";

   /** 【语速音量】总结提示语 */
    public static final String SPEED_VOLUME_SUMMARY = "请根据以下销售话术演练的音量和语速表现，撰写一段简洁的总结分析文案。" +
                                                      "要求：不使用标题，直接输出内容，语言精炼、客观中肯，列出具体不足的点。表现详情：%s:%s %s:%s %s:%s ";


    /** 【自信度】总结提示语 */
    public static final String CONFIDENCE_SUMMARY = "请根据以下销售话术演练的自信度表现，撰写一段简洁的总结分析文案。" +
                                                     "要求：不使用标题，直接输出内容，语言精炼、客观中肯，列出具体不足的点。表现详情：%s";


    /** 【完整度】评分提示（JDK 1.8 可用） */
    public static final String COMPLETENESS_SCORE =
            "你是一位专业的销售培训评估专家，擅长从内容结构、关键信息覆盖和客户沟通逻辑角度评估销售话术。请对以下销售人员在脱稿练习中所做的产品介绍内容进行“完整度”评分，满分为100分。" +
                    "完整度定义：指话术是否全面覆盖了产品标准介绍的核心要素，包括但不限于：产品的特征、优势、利益和案例等。重点评估其内容是否完整、有逻辑、无重大遗漏。" +
                    "评分标准参考：" +
                    "90–100分：全面涵盖所有关键信息点，结构清晰，逻辑连贯，无遗漏，体现对标准话术的深入理解和自主整合。" +
                    "80–89分：包含大部分核心要素，仅轻微遗漏某个非关键点，整体结构完整，客户能获得充分信息。" +
                    "70–79分：基本框架存在，但缺失部分重要信息，影响客户全面理解产品价值。" +
                    "60–69分：内容不完整，仅描述部分功能或特点，缺乏逻辑串联，关键信息严重缺失，难以支撑有效销售。" +
                    "60分以下：信息零散、跳跃，仅提及产品名称或个别功能，遗漏绝大多数核心要素，不符合标准话术要求。" +
                    "评估要求：阅读下方销售人员的产品介绍内容；对照标准产品介绍应包含的关键信息模块，判断其覆盖程度；给出具体分数（0–100分，取整数）；简要说明表现分析（如：缺少哪些关键点？哪些部分表达充分？），内容简短一两句；可选地指出1–2个最需补充的内容项，以提升完整度。" +
                    "请严格按照以下格式输出：【完整度评分】XXX【表现分析与改进建议】……以下是公司的产品标准介绍话术：【产品标准话术】%s现在，请评估以下内容：【销售人员话术】%s";



    public static String mergeByType(String raw) {
        if (raw == null || raw.isEmpty()) return "";
        return Arrays.stream(raw.split("；"))
                .filter(StringUtils::isNotBlank)
                .collect(Collectors.groupingBy(s -> s.split(":")[0],
                        LinkedHashMap::new,
                        Collectors.mapping(s -> s.split(":", 2)[1],
                                Collectors.joining("；"))))
                .entrySet().stream()
                .map(e -> e.getKey() + ":" + e.getValue())
                .collect(Collectors.joining("；"));
    }



}
